package com.cans.base.service.api;

import com.cans.base.dto.PageRes;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;

import java.io.Serializable;
import java.util.List;

/**
 * Service基类
 * @author cans
 * @param <T>
 * @param <ID>
 */
public interface IBaseService<T,ID extends Serializable> {
    /**
     * 保存或更新
     *
     * @param t
     */
    void saveOrUpdate(T t);

    /**
     * 保存
     *
     * @param t
     */
    T save(T t);

    /**
     * 更新
     *
     * @param t
     */
    T update(T t);

    /**
     * 分页查询
     *
     * @param page
     * @return
     */
    PageRes<T> findPage(Pageable page);

    /**
     * 待条件分页查询
     * @param var1
     * @param page
     * @return
     */
    PageRes<T> findAll(Specification<T> var1, Pageable page);

    /**
     * 通过ID获取
     *
     * @param id
     * @return
     */
    T findOne(String id);

    /**
     * 通过ID删除
     *
     * @param id
     */
    void delete(String id);

    /**
     * 通过bean删除
     *
     * @param user
     */
    void delete(T user);

    /**
     *
     * @param ex
     * @return
     */
    List<T> findAll(Example<T> ex);

    /**
     *
     * @return
     */
    List<T> findAll();
    /**
     * 待条件分页查询
     * @param specification
     * @return
     */
    List<T> findAll(Specification<T> specification);

}
